package clases;

import utils.Constantes;

import com.Juego;

public class EntidadDisparo extends Entidad {
	
	private double velocidadMovimientoNorte = -500;
	private double velocidadMovimientoSur = 500;
	private double velocidadMovimientoEste = 500;
	private double velocidadMovimientoOeste = -500;
	private Juego juego;
	private boolean used = false;
	private Constantes.orientacion orientacion;
	
	
	/**
	 * Create a new shot from the player
	 * 
	 * @param game The game in which the shot has been created
	 * @param sprite The sprite representing this shot
	 * @param x The initial x location of the shot
	 * @param y The initial y location of the shot
	 */
	public EntidadDisparo(Juego juego,int x,int y, Constantes.orientacion orientacion) {
		super("sprites/shot.gif",x,y);
		
		this.juego = juego;
		this.orientacion = orientacion;
		
		if (orientacion==Constantes.orientacion.NORTE)
		{	
			this.setSprite("sprites/shot.gif");
			dy = velocidadMovimientoNorte;
			this.x = x + 10;
			this.y = y - 30;
		}

		if (orientacion==Constantes.orientacion.SUR)
		{
			this.setSprite("sprites/shotAb.gif");
			dy = velocidadMovimientoSur;
			this.x = x + 10;
			this.y = y + 30;
		}

		if (orientacion==Constantes.orientacion.ESTE)
		{
			this.setSprite("sprites/shotDer.gif");
			dx = velocidadMovimientoEste;
			this.x = x + 30;
			this.y = y + 10;
		}

		if (orientacion==Constantes.orientacion.OESTE)
		{
			this.setSprite("sprites/shotIzq.gif");
			dx = velocidadMovimientoOeste;
			this.x = x - 30;
			this.y = y + 10;
		}
	}

	/**
	 * Request that this shot moved based on time elapsed
	 * 
	 * @param delta The time that has elapsed since last move
	 */
	public void move(long delta) {
		super.move(delta);
		
		if (y < 0 || y > 600 || x < 0 || x > 800){
			juego.removerEntidad(this);
		}
	}
	
	/**
	 * Notification that this shot has collided with another
	 * entity
	 * 
	 * @parma other The other entity with which we've collided
	 */
	public void colisionacon(Entidad other) {

		if (used) {
			return;
		}
		
		if (other instanceof EntidadJugador) {
			juego.removerEntidad(this);
			if (((EntidadJugador) other).getVidas()>1)
			{
				((EntidadJugador) other).respawn();	
			}
			else
			{
				juego.removerEntidad(other);	
				juego.notificarMuerte((EntidadJugador) other);
			}
			used = true;	
		}
		if (other instanceof EntidadPared) {
			juego.removerEntidad(this);
		}
	}
}